package vip.liux.contracts.security.core.extensions;


import java.util.Optional;

/**
 * 提供用户邮箱地址存储和管理的抽象接口。
 *
 * @param <TUser> 封装用户的类型。
 */
public interface IUserEmailStore<TUser> extends IUserStore<TUser> {
    /**
     * 设置用户的邮箱地址。
     *
     * @param user  要设置邮箱的用户。
     * @param email 邮箱地址。
     */
    void setEmail(TUser user, String email);

    /**
     * 获取指定用户的邮箱地址。
     *
     * @param user 要查询的用户。
     * @return 邮箱地址，若无则为 Optional.empty()。
     */
    String getEmail(TUser user);

    /**
     * 获取指定用户的邮箱是否已验证。
     *
     * @param user 要查询的用户。
     * @return 如果已验证返回 true，否则返回 false。
     */
    boolean getEmailConfirmed(TUser user);

    /**
     * 设置指定用户的邮箱验证状态。
     *
     * @param user      要设置的用户。
     * @param confirmed 是否已验证。
     */
    void setEmailConfirmed(TUser user, boolean confirmed);

    /**
     * 通过规范化邮箱查找用户。
     *
     * @param normalizedEmail 规范化邮箱地址。
     * @return 匹配的用户，若无则为 Optional.empty()。
     */
    Optional<TUser> findByEmail(String normalizedEmail);

    /**
     * 获取指定用户的规范化邮箱地址。
     *
     * @param user 要查询的用户。
     * @return 规范化邮箱地址，若无则为 Optional.empty()。
     */
    String getNormalizedEmail(TUser user);

    /**
     * 设置指定用户的规范化邮箱地址。
     *
     * @param user            要设置的用户。
     * @param normalizedEmail 规范化邮箱地址。
     */
    void setNormalizedEmail(TUser user, String normalizedEmail);
}